Laboratorio 2011-02

 

 

Esercizio 01

Realizzare in OS/161 un programma concorrente in linguaggio C che, utilizzando i thread, manipoli delle stringhe di caratteri, con le seguenti specifiche.

 

Il thread principale attiva due thread ulteriori (denominati sender e receiver) e si mette in attesa che entrambi terminino.

 

Il thread sender procede con costrutto iterativo all'interno del quale:

·         legge una stringa da standard input (tastiera)

·         segnala al receiver che la stringa è stata letta e aspetta che questo la manipoli

·         quando il receiver ha manipolato la stringa e sveglia il sender, quest'ultimo visualizza la stringa su standard output (video)

 

Il thread receiver include un costrutto iterativo all'interno del quale:

 

I cicli di lettura/visualizzazione e di conversione in maiuscolo terminano non appena viene introdotta la stringa “end”.

Il thread principale visualizzi il numero di stringhe processate prima di terminare definitivamente.

 

Suggerimenti

      /home/pso/os161/os161-base-1.99.05/kern/test

      un file tt4.c contenente la funzionalità richiesta (funzione di test numero 4, threadtest4)

 

 

Esercizio 02

Si scriva in OS/161 un programma che sia in grado di ordinare un vettore di n+1 elementi utilizzando n thread identici.

Ogni thread è responsabile di due elementi adiacenti (il thread 0 si occupa degli elementi 0 e 1, il thread 1 degli elementi 1 e 2, ..., il thread n-1 degli elementi n-1 e n).

Ciascun thread confronta i due elementi di cui si occupa e li scambia se non si trovano nell'ordine corretto.

Una volta terminato il proprio lavoro tutti i thread si sincronizzano con un thread specifico che termina l'intero processo se tutti gli elementi sono ordinati correttamente oppure esegue nuovamente tutti i thread per proseguire nella fase di ordinamento.